#include <stdio.h>
#include <unistd.h>
#include <sys/epoll.h>

int main()
{
    //1. 创建epoll操作句柄
    int epfd = epoll_create(5); //里面的数字随便给，但是不能小于0
    {
        if(epfd < 0)
        {
            perror("epoll_create");
            return 0;
        }
    }

    //2. 操作epoll,添加0号文件描述符对应的事件结构到epoll当中
    //操作之前，需要创建epoll_event结构体
    struct epoll_event ee;
    ee.events = EPOLLIN; //关心多种事件 ，则用按位或的方式EPOLLIN | EPOLLOUT
    ee.data.fd = 0; 
    //当监控成功之后，从双向链表当中将事件结构拷贝到用户空间的事件结构数组之后
    //程序员可以通过该结构当中的fd，知道该结构属于哪一个文件描述符

    epoll_ctl(epfd, EPOLL_CTL_ADD, 0, &ee);

    //3. epoll等待
    struct epoll_event arr[10];
    epoll_wait(epfd, arr, 10, -1); // -1 表示非阻塞

    char buf[1024] = {0};
    read(arr[0].data.fd, buf, sizeof(buf) - 1);
    printf("buf is : %s", buf);

    return 0;
}
